Java中的深拷贝与浅拷贝 |
您所在的位置:网站首页 › java 深拷贝和浅拷贝 › Java中的深拷贝与浅拷贝 |
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Java 中的深拷贝与浅拷贝
2017/05/01 0 Java 中有两种拷贝方式一种是浅拷贝,一种是深拷贝。
两者的区别也很好阐述:浅拷贝它只是简单拷贝对象成员的引用,而深拷贝则会
重新生成一个对象副本。当然
String 这些对象比较特殊。
举个实例:(注意看注释)
package clone;public class Teacher implements Cloneable {public String name;public int age;public Teacher(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic Object clone() {Object obj=null;try {obj=super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return obj;}@Overridepublic String toString() {return Teacher [name= + name + , age= + age + ] }}package clone;public class Student implements Cloneable {public Teacher teacher;public String name;public int age;public Student(Teacher teacher, String name, int age) {super();this.teacher = teacher;this.name = name;this.age = age;}// 浅拷贝 @Overridepublic Object clone() {Object obj=null;try {obj=super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return obj;}// 深拷贝
public Student clone(boolean flag) {Student student=null;try {student=(Student) super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}student.teacher=(Teacher) student.teacher.clone();return student;}@Overridepublic String toString() {return Student [teacher= + teacher + , name= + name + , age= + age + ] }}package clone;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubTeacher teacher;Student student;Student clone_student;teacher=new Teacher( 程老师
, 20);student=new Student(teacher, 小猿
, 12);// 浅拷贝
clone_student=(Student) student.clone();System.out.println(teacher);clone_student.age=18;clone_student.name= 大猿
// 改变
int 和
String 不会影响原本的类
clone_student.teacher.age=40; // 改变对象 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |